1 /*
2 
3 Boost Software License - Version 1.0 - August 17th, 2003
4 
5 Permission is hereby granted, free of charge, to any person or organization
6 obtaining a copy of the software and accompanying documentation covered by
7 this license (the "Software") to use, reproduce, display, distribute,
8 execute, and transmit the Software, and to prepare derivative works of the
9 Software, and to permit third-parties to whom the Software is furnished to
10 do so, all subject to the following:
11 
12 The copyright notices in the Software and this entire statement, including
13 the above license grant, this restriction and the following disclaimer,
14 must be included in all copies of the Software, in whole or in part, and
15 all derivative works of the Software, unless such copies or derivative
16 works are solely in the form of machine-executable object code generated by
17 a source language processor.
18 
19 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21 FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
22 SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
23 FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
24 ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
25 DEALINGS IN THE SOFTWARE.
26 
27 */ 
28 
29 module derelict.purple.log;
30 
31 import derelict.glib.gtypes;
32 import derelict.glib.glibconfig;
33 import derelict.glib.ghash;
34 import derelict.glib.glist;
35 import derelict.purple.conversation;
36 import derelict.purple.account;
37 import core.stdc.time;
38 import core.stdc.config;
39 import core.stdc.stdio;
40 
41 extern (C):
42 
43 alias _PurpleLog PurpleLog;
44 alias _PurpleLogLogger PurpleLogLogger;
45 alias _PurpleLogCommonLoggerData PurpleLogCommonLoggerData;
46 alias _PurpleLogSet PurpleLogSet;
47 alias _Anonymous_0 PurpleLogType;
48 alias _Anonymous_1 PurpleLogReadFlags;
49 alias void function (_GHashTable*, _PurpleLogSet*) PurpleLogSetCallback;
50 
51 enum _Anonymous_0
52 {
53 	PURPLE_LOG_IM = 0,
54 	PURPLE_LOG_CHAT = 1,
55 	PURPLE_LOG_SYSTEM = 2
56 }
57 
58 enum _Anonymous_1
59 {
60 	PURPLE_LOG_READ_NO_NEWLINE = 1
61 }
62 
63 struct _PurpleLogLogger
64 {
65 	char* name;
66 	char* id;
67 	void function (PurpleLog*) create;
68 	gsize function (PurpleLog*, PurpleMessageFlags, const(char)*, time_t, const(char)*) write;
69 	void function (PurpleLog*) finalize;
70 	GList* function (PurpleLogType, const(char)*, PurpleAccount*) list;
71 	char* function (PurpleLog*, PurpleLogReadFlags*) read;
72 	int function (PurpleLog*) size;
73 	int function (PurpleLogType, const(char)*, PurpleAccount*) total_size;
74 	GList* function (PurpleAccount*) list_syslog;
75 	void function (PurpleLogSetCallback, GHashTable*) get_log_sets;
76 	gboolean function (PurpleLog*) remove;
77 	gboolean function (PurpleLog*) is_deletable;
78 	void function () _purple_reserved1;
79 	void function () _purple_reserved2;
80 	void function () _purple_reserved3;
81 	void function () _purple_reserved4;
82 }
83 
84 struct _PurpleLog
85 {
86 	PurpleLogType type;
87 	char* name;
88 	PurpleAccount* account;
89 	PurpleConversation* conv;
90 	time_t time;
91 	PurpleLogLogger* logger;
92 	void* logger_data;
93 	core.stdc.time.tm* tm;
94 }
95 
96 struct _PurpleLogCommonLoggerData
97 {
98 	char* path;
99 	FILE* file;
100 	void* extra_data;
101 }
102 
103 struct _PurpleLogSet
104 {
105 	PurpleLogType type;
106 	char* name;
107 	PurpleAccount* account;
108 	gboolean buddy;
109 	char* normalized_name;
110 }
111 
112 version(Derelict_Link_Static)
113 {
114     extern( C ) nothrow 
115     {
116         PurpleLog* purple_log_new(PurpleLogType type, const(char)* name, PurpleAccount* account, PurpleConversation* conv, time_t time, const(tm)* tm);
117         void purple_log_free(PurpleLog* log);
118         void purple_log_write(PurpleLog* log, PurpleMessageFlags type, const(char)* from, time_t time, const(char)* message);
119         char* purple_log_read(PurpleLog* log, PurpleLogReadFlags* flags);
120         GList* purple_log_get_logs(PurpleLogType type, const(char)* name, PurpleAccount* account);
121         GHashTable* purple_log_get_log_sets();
122         GList* purple_log_get_system_logs(PurpleAccount* account);
123         int purple_log_get_size(PurpleLog* log);
124         int purple_log_get_total_size(PurpleLogType type, const(char)* name, PurpleAccount* account);
125         int purple_log_get_activity_score(PurpleLogType type, const(char)* name, PurpleAccount* account);
126         gboolean purple_log_is_deletable(PurpleLog* log);
127         gboolean purple_log_delete(PurpleLog* log);
128         char* purple_log_get_log_dir(PurpleLogType type, const(char)* name, PurpleAccount* account);
129         gint purple_log_compare(gconstpointer y, gconstpointer z);
130         gint purple_log_set_compare(gconstpointer y, gconstpointer z);
131         void purple_log_set_free(PurpleLogSet* set);
132         void purple_log_common_writer(PurpleLog* log, const(char)* ext);
133         GList* purple_log_common_lister(PurpleLogType type, const(char)* name, PurpleAccount* account, const(char)* ext, PurpleLogLogger* logger);
134         int purple_log_common_total_sizer(PurpleLogType type, const(char)* name, PurpleAccount* account, const(char)* ext);
135         int purple_log_common_sizer(PurpleLog* log);
136         gboolean purple_log_common_deleter(PurpleLog* log);
137         gboolean purple_log_common_is_deletable(PurpleLog* log);
138         PurpleLogLogger* purple_log_logger_new(const(char)* id, const(char)* name, int functions, ...);
139         void purple_log_logger_free(PurpleLogLogger* logger);
140         void purple_log_logger_add(PurpleLogLogger* logger);
141         void purple_log_logger_remove(PurpleLogLogger* logger);
142         void purple_log_logger_set(PurpleLogLogger* logger);
143         PurpleLogLogger* purple_log_logger_get();
144         GList* purple_log_logger_get_options();
145         void purple_log_init();
146         void* purple_log_get_handle();
147         void purple_log_uninit();
148     }
149 }
150 else
151 {
152     extern( C ) nothrow 
153     {
154         alias da_purple_log_new = PurpleLog* function(PurpleLogType type, const(char)* name, PurpleAccount* account, PurpleConversation* conv, time_t time, const(tm)* tm);			
155         alias da_purple_log_free = void function(PurpleLog* log);																													
156         alias da_purple_log_write = void function(PurpleLog* log, PurpleMessageFlags type, const(char)* from, time_t time, const(char)* message);									
157         alias da_purple_log_read = char* function(PurpleLog* log, PurpleLogReadFlags* flags);																						
158         alias da_purple_log_get_logs = GList* function(PurpleLogType type, const(char)* name, PurpleAccount* account);																
159         alias da_purple_log_get_log_sets = GHashTable* function();																													
160         alias da_purple_log_get_system_logs = GList* function(PurpleAccount* account);																								
161         alias da_purple_log_get_size = int function(PurpleLog* log);																												
162         alias da_purple_log_get_total_size = int function(PurpleLogType type, const(char)* name, PurpleAccount* account);															
163         alias da_purple_log_get_activity_score = int function(PurpleLogType type, const(char)* name, PurpleAccount* account);														
164         alias da_purple_log_is_deletable = gboolean function(PurpleLog* log);																										
165         alias da_purple_log_delete = gboolean function(PurpleLog* log);																												
166         alias da_purple_log_get_log_dir = char* function(PurpleLogType type, const(char)* name, PurpleAccount* account);															
167         alias da_purple_log_compare = gint function(gconstpointer y, gconstpointer z);																								
168         alias da_purple_log_set_compare = gint function(gconstpointer y, gconstpointer z);																							
169         alias da_purple_log_set_free = void function(PurpleLogSet* set);																											
170         alias da_purple_log_common_writer = void function(PurpleLog* log, const(char)* ext);																						
171         alias da_purple_log_common_lister = GList* function(PurpleLogType type, const(char)* name, PurpleAccount* account, const(char)* ext, PurpleLogLogger* logger);				
172         alias da_purple_log_common_total_sizer = int function(PurpleLogType type, const(char)* name, PurpleAccount* account, const(char)* ext);										
173         alias da_purple_log_common_sizer = int function(PurpleLog* log);																											
174         alias da_purple_log_common_deleter = gboolean function(PurpleLog* log);																										
175         alias da_purple_log_common_is_deletable = gboolean function(PurpleLog* log);																								
176         alias da_purple_log_logger_new = PurpleLogLogger* function(const(char)* id, const(char)* name, int functions, ...);															
177         alias da_purple_log_logger_free = void function(PurpleLogLogger* logger);																									
178         alias da_purple_log_logger_add = void function(PurpleLogLogger* logger);																									
179         alias da_purple_log_logger_remove = void function(PurpleLogLogger* logger);																									
180         alias da_purple_log_logger_set = void function(PurpleLogLogger* logger);																									
181         alias da_purple_log_logger_get = PurpleLogLogger* function();																												
182         alias da_purple_log_logger_get_options = GList* function();																													
183         alias da_purple_log_init = void function();																																	
184         alias da_purple_log_get_handle = void* function();																															
185         alias da_purple_log_uninit = void function();			
186     }
187 
188     __gshared
189     {
190 	    da_purple_log_new purple_log_new;
191 	    da_purple_log_free purple_log_free;
192 	    da_purple_log_write purple_log_write;
193 	    da_purple_log_read purple_log_read;
194 	    da_purple_log_get_logs purple_log_get_logs;
195 	    da_purple_log_get_log_sets purple_log_get_log_sets;
196 	    da_purple_log_get_system_logs purple_log_get_system_logs;
197 	    da_purple_log_get_size purple_log_get_size;
198 	    da_purple_log_get_total_size purple_log_get_total_size;
199 	    da_purple_log_get_activity_score purple_log_get_activity_score;
200 	    da_purple_log_is_deletable purple_log_is_deletable;
201 	    da_purple_log_delete purple_log_delete;
202 	    da_purple_log_get_log_dir purple_log_get_log_dir;
203 	    da_purple_log_compare purple_log_compare;
204 	    da_purple_log_set_compare purple_log_set_compare;
205 	    da_purple_log_set_free purple_log_set_free;
206 	    da_purple_log_common_writer purple_log_common_writer;
207 	    da_purple_log_common_lister purple_log_common_lister;
208 	    da_purple_log_common_total_sizer purple_log_common_total_sizer;
209 	    da_purple_log_common_sizer purple_log_common_sizer;
210 	    da_purple_log_common_deleter purple_log_common_deleter;
211 	    da_purple_log_common_is_deletable purple_log_common_is_deletable;
212 	    da_purple_log_logger_new purple_log_logger_new;
213 	    da_purple_log_logger_free purple_log_logger_free;
214 	    da_purple_log_logger_add purple_log_logger_add;
215 	    da_purple_log_logger_remove purple_log_logger_remove;
216 	    da_purple_log_logger_set purple_log_logger_set;
217 	    da_purple_log_logger_get purple_log_logger_get;
218 	    da_purple_log_logger_get_options purple_log_logger_get_options;
219 	    da_purple_log_init purple_log_init;
220 	    da_purple_log_get_handle purple_log_get_handle;
221 	    da_purple_log_uninit purple_log_uninit;	
222     }
223 }